package com.itheima.controller;

import com.aliyuncs.exceptions.ClientException;
import com.itheima.constant.MessageConstant;
import com.itheima.constant.RedisMessageConstant;
import com.itheima.entity.Result;
import com.itheima.utils.SMSUtils;
import com.itheima.utils.ValidateCodeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.JedisPool;
//用于手机发送验证码

@RestController
public class ValidateCodeController {
    @Autowired
    private JedisPool jedisPool;

   // @RequestMapping("/validateCode/send40rder")
    //用于预约发送验证码
    public Result send40rder(String telephone){
        try {
            String param = ValidateCodeUtils.generateValidateCode4String(6);

            //发送短信，暂时隐藏
            SMSUtils.sendShortMessage(SMSUtils.VALIDATE_CODE,telephone,param);

            // 使用 redis 存储验证码(验证码要定期失效，并且不用长时间存储，符合redis 的存储要求)
            // setex() 就是 指定制定的存活时间  第一个参数是 key 第二个参数是 存活时间(单位是秒)  第三个参数是 value
            //key唯一 ,因为后面还有预约，不能只用手机号作为key,所以要在手机号的基础上加东西,可以设定不同的字符串，在不同发送短信时，加上不同的标签
            jedisPool.getResource().setex(telephone+ RedisMessageConstant.SENDTYPE_ORDER,300,param);

            return new Result(true, MessageConstant.SEND_VALIDATECODE_SUCCESS);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false, MessageConstant.SEND_VALIDATECODE_FAIL);
        }
    }

    // 用户登录 发送验证码
    //  /validateCode/send4Login   telephone
    @RequestMapping("/validateCode/send4Login")
    public Result send4Login(String telephone){
        try {
            Integer param = ValidateCodeUtils.generateValidateCode(4);

            //发送短信，暂时隐藏
            //SMSUtils.sendShortMessage(SMSUtils.VALIDATE_CODE,telephone,param.toString());

            // 使用 redis 存储验证码(验证码要定期失效，并且不用长时间存储，符合redis 的存储要求)
            // setex() 就是 指定制定的存活时间  第一个参数是 key 第二个参数是 存活时间(单位是秒)  第三个参数是 value
            //key唯一 ,因为后面还有预约，不能只用手机号作为key,所以要在手机号的基础上加东西,可以设定不同的字符串，在不同发送短信时，加上不同的标签
            jedisPool.getResource().setex(telephone+ RedisMessageConstant.SENDTYPE_LOGIN,300000,param.toString());
            System.out.println(param.toString());
            return new Result(true, MessageConstant.SEND_VALIDATECODE_SUCCESS);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false, MessageConstant.SEND_VALIDATECODE_FAIL);
        }
    }

    // 用户编辑 发送验证码
    //  /validateCode/send4Login   telephone
    @RequestMapping("/validateCode/send4update")
    public Result send4Update(String telephone){
        try {
            Integer param = ValidateCodeUtils.generateValidateCode(4);

            //发送短信，暂时隐藏
            //SMSUtils.sendShortMessage(SMSUtils.VALIDATE_CODE,telephone,param.toString());

            // 使用 redis 存储验证码(验证码要定期失效，并且不用长时间存储，符合redis 的存储要求)
            // setex() 就是 指定制定的存活时间  第一个参数是 key 第二个参数是 存活时间(单位是秒)  第三个参数是 value
            //key唯一 ,因为后面还有预约，不能只用手机号作为key,所以要在手机号的基础上加东西,可以设定不同的字符串，在不同发送短信时，加上不同的标签
            jedisPool.getResource().setex(telephone+ RedisMessageConstant.SENDTYPE_UPDATE,300000,param.toString());
            System.out.println(param.toString());
            return new Result(true, MessageConstant.SEND_VALIDATECODE_SUCCESS);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false, MessageConstant.SEND_VALIDATECODE_FAIL);
        }
    }



}
